<?php 

class Event_CategoryPostSave extends Crud_Event_Handler 
{
	protected $_type = 'postSave';
	
	/**
	 * Run handler with options array.
	 * 
	 * @param ProductCategoryRow $row
	 * @return void
	 */
	public function run($row)
	{
		$catRow = $row->getRow();
		$catRow = CategoryService::getInstance()->setCategoryPath($catRow);
		$this->_addAttCat ($row);

		$catRow->save();
	}

	protected function _addAttCat ($row){
		$atts = $this->_getParam('attendant_category', array());
		foreach ($atts as $att) {
			if (!$att) continue;
			$att = explode ("::" , $att);

			$peer = ProductCategoryPeer::getInstance();
			$select = $peer->select();
			$select->where(ProductCategoryPeer::ID, $att[1]);
			$rowset = $peer->fetchAll($select);
			if ($rowset->count() >= 2) {
				throw new Crud_Exception("Невозможно добавить сопуствущую категорию: `$att`. Категорий с таким именем несколько, пожалуйста, уточните запрос");
			}
			$alikeRow = $rowset->current();
			if (!$alikeRow) {
				throw new Crud_Exception("Невозможно добавить сопутствуюую категорию: `$att`. Категория с таким именем не найден");
			}

			$select = ProductCategoryAttendantPeer::getInstance()->select();
			$select->where('attendant_id = ?', $alikeRow->getId());
			$select->where('category_id = ?', $row->getId());
			$m2mRow = ProductAttendantCategoryPeer::getInstance()->fetchRow($select);
			if ($m2mRow) {
				throw new Crud_Exception("Невозможно добавить сопутствующую категорию: `$alikeRows[0]`. Наименование уже есть в списке");
			}

			$nRow = ProductCategoryAttendantPeer::getInstance()->createRow();
			$nRow->setAttendantId($alikeRow->getId());
			$nRow->setCategoryId($row->getId());
			$nRow->save();
		}
	}
}